package com.summer.aop.Proxy.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class DynamicProxyFactory {
	public static <T> T create(T obj){
		
		@SuppressWarnings("unchecked")
		T proxyObj = (T) Proxy.newProxyInstance(
					Thread.currentThread().getContextClassLoader(),//用来制作外观的类加载器，这个可以直接new必须传
						obj.getClass().getInterfaces(),//构造对象的接口，jdk 必须使用接口来构造对象。这里直接用getInterfaces获取
						new MyInvocationHandler(obj));//切片行为，代理调用时会执行这个函数，用来完成代理行为。
		return proxyObj;
	}
	
	public static class MyInvocationHandler implements InvocationHandler {
		Object mubiao ;
		public MyInvocationHandler(Object mubiao){
			this.mubiao = mubiao;
		}
		@Override
		public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
			System.out.println("统计开始 ~~~~");
			return method.invoke(mubiao, args);
		}
	}
	
}
